﻿/*  Eleven Business Suite : Un ERP básico para pequeños empresarios.
 *  Copyright (C) 2011  Francis Bolaños Arias
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>;.
 */

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;
using ElevenCore;
using ElevenGlobal;

namespace ElevenGUI
{
    public partial class FrmConsultas : Form
    {
        private GLOBuscador buscador;

        private DataTable dtConsultas;

        public FrmConsultas()
        {
            InitializeComponent();
        }

        private void FrmLlamadas_Load(object sender, EventArgs e)
        {
            cargarLista();
            cargarDatos();
        }

        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            buscador = new GLOBuscador();
            buscador.Entidad = (int)GLOBuscador.Entidades.Clientes;
            buscador.FormClosed += new FormClosedEventHandler(buscador_Closed);
            buscador.ShowDialog();
        }

        private void buscador_Closed(object sender, FormClosedEventArgs e)
        {
            try
            {
                txtCliente.Text = Cache.cliente.Cells[2].Value.ToString() + " "
                    + Cache.cliente.Cells[3].Value.ToString() + " "
                    + Cache.cliente.Cells[4].Value.ToString();
            }
            catch (NullReferenceException) { }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            btnBuscarCliente.Enabled = true;
            btnCancelar.Enabled = true;
            btnNuevo.Enabled = false;
            btnEliminar.Enabled = false;
            rb1.Enabled = true;
            rb2.Enabled = true;
            rb3.Enabled = true;
            rb4.Enabled = true;
            rb5.Enabled = true;
            rb5.Checked = true;
            txtCliente.Text = "";
            txtDescripcion.Enabled = true;
            txtDescripcion.Text = "";
            lstConsultas.Enabled = false;
            dtpFecha2.Enabled = false;
            btnBuscarCliCons.Enabled = false;
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                DataRowView dr = (DataRowView)(lstConsultas.SelectedItem);
                CRMConsulta cons = new CRMConsulta(int.Parse(dr["IdConsulta"].ToString()), 0, 0, "D", new DateTime());
                if (cons.eliminar())
                {
                    btnCancelar.Enabled = true;
                    btnCancelar.PerformClick();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Se ha eliminado la consulta");
                    mensaje.ShowDialog();
                    cargarLista();
                }
            }
            catch (NullReferenceException ne)
            {
                GLOMensajeError error = new GLOMensajeError("Error de validación", "Debe elegir una consulta de la lista \r\n a la izquierda para eliminarla.\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                error.ShowDialog();
            }
            catch (SqlException se)
            {
                GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                error.ShowDialog();
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            btnBuscarCliente.Enabled = false;
            btnCancelar.Enabled = false;
            btnNuevo.Enabled = true;
            btnEliminar.Enabled = true;
            rb1.Enabled = false;
            rb2.Enabled = false;
            rb3.Enabled = false;
            rb4.Enabled = false;
            rb5.Enabled = false;
            rb5.Checked = true;
            txtDescripcion.Enabled = false;
            txtDescripcion.Text = "";
            lstConsultas.Enabled = true;
            dtpFecha2.Enabled = true;
            btnBuscarCliCons.Enabled = true;
        }

        private void dtpFecha2_ValueChanged(object sender, EventArgs e)
        {
            txtCliente.Text = "";
            txtDescripcion.Text = "";
            rb5.Checked = true;
            cargarLista();
            cargarDatos();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            int nivel = 5;
            if (rb1.Checked)
            {
                nivel = 1;
            }
            else if (rb2.Checked)
            {
                nivel = 2;
            }
            else if (rb3.Checked)
            {
                nivel = 3;
            }
            else if (rb4.Checked)
            {
                nivel = 4;
            }
            else if (rb5.Checked)
            {
                nivel = 5;
            }

            if (lstConsultas.Enabled)
            {
                try
                {
                    DataRowView dr = (DataRowView)(lstConsultas.SelectedItem);
                    CRMConsulta cons = new CRMConsulta(int.Parse(dr["IdConsulta"].ToString()), int.Parse(dr["IdCliente"].ToString()), nivel, txtDescripcion.Text, dtpFecha.Value);
                    cons.modificar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Consulta actualizada correctamente");
                    mensaje.ShowDialog();
                    cargarLista();
                }
                catch (NullReferenceException ne)
                {
                    GLOMensajeError error = new GLOMensajeError("Error de validación", "Para actualizar una consulta debe elegir una de la lista a la izquierda.\nSi desea crear una nueva de click en el botón \"Nuevo\".\n\n Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                    error.ShowDialog();
                }
                catch (ValidadorException ve)
                {
                    GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "Ingresó algún dato cuyo formato es incorrecto.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                    error.ShowDialog();
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
            else
            {
                try
                {
                    CRMConsulta cons = new CRMConsulta(0, int.Parse(Cache.cliente.Cells[0].Value.ToString()), nivel, txtDescripcion.Text, dtpFecha.Value);
                    cons.insertar();
                    GLOMensajeAceptar mensaje = new GLOMensajeAceptar("Consulta insertada con éxito");
                    mensaje.ShowDialog();
                    btnCancelar.PerformClick();
                    cargarLista();
                }
                catch (ValidadorException ve)
                {
                    GLOMensajeError error = new GLOMensajeError("Error al validar los datos.", "Ingresó algún dato cuyo formato es incorrecto.\n\n Mensaje técnico del error: " + ve.Message, "ValidadorException");
                    error.ShowDialog();
                }
                catch (NullReferenceException ne)
                {
                    GLOMensajeError error = new GLOMensajeError("Error de validación", "Mensaje técnico del error: " + ne.Message, "NullReferenceException");
                    error.ShowDialog();
                }
                catch (SqlException se)
                {
                    GLOMensajeError error = new GLOMensajeError("Error grave al conectar con la base de datos.", "Este error puede deberse a que se haya perdido la conexión con la base de datos o ocurriera un error en el sistema.\n\n Mensaje técnico del error: " + se.Message, "SqlException");
                    error.ShowDialog();
                }
            }
        }

        private void cargarLista()
        {
            try
            {
                dtConsultas = CRMConsulta.consultar(dtpFecha2.Value);
                lstConsultas.DataSource = dtConsultas;
                lstConsultas.DisplayMember = "Fecha";
                lstConsultas.ValueMember = "IdConsulta";
            }
            catch (FormatException) { }
            catch (NullReferenceException) { }
        }

        private void cargarDatos()
        {
            try
            {
                DataTable dt = POSCliente.consultarXID(int.Parse(dtConsultas.Rows[int.Parse(lstConsultas.SelectedIndex.ToString())]["IdCliente"].ToString()));
                DataRow dr = dt.Rows[0];
                txtCliente.Text = dr["NombreCompleto"].ToString();
                int nivel = int.Parse(dtConsultas.Rows[int.Parse(lstConsultas.SelectedIndex.ToString())]["NivelSatisfaccion"].ToString());
                switch (nivel)
                {
                    case 1:
                        rb1.Checked = true;
                        break;
                    case 2:
                        rb2.Checked = true;
                        break;
                    case 3:
                        rb3.Checked = true;
                        break;
                    case 4:
                        rb4.Checked = true;
                        break;
                    case 5:
                        rb5.Checked = true;
                        break;
                }
                txtDescripcion.Text = dtConsultas.Rows[int.Parse(lstConsultas.SelectedIndex.ToString())]["Contenido"].ToString();

                btnBuscarCliente.Enabled = true;
                rb1.Enabled = true;
                rb2.Enabled = true;
                rb3.Enabled = true;
                rb4.Enabled = true;
                rb5.Enabled = true;
                txtDescripcion.Enabled = true;
            }
            catch (IndexOutOfRangeException)
            {
                txtCliente.Text = "";
                txtDescripcion.Text = "";
                rb5.Checked = true;
            }
        }

        private void lstConsultas_SelectedIndexChanged(object sender, EventArgs e)
        {
            cargarDatos();
        }

    }
}
